Abstract
- 无监督学习典范 GPT可以通过zero/few-shot learning解决大部分问题,因为预训练GPT的时候已经在大量的无标签数据(45TB的数据岂是我等鼠人能够想象的??😂)中学习到了语言的特点。
- 有监督学习也就是我们常见的fine-tuning学习,可以通过大量有标签的数据中学习,并解决大部分问题且比GPT表现的好。常见的就是微调各种BERT啦,比如我们提出的的SICKNet就是用有监督学习🤞。
- 作者提出一种半监督学习,叫做pattern-exploiting training (PET)🤔
- 目的是将手中少量 [有标签的输入样本] 转换为一种完形填空(cloze-style)的类型文本帮助语言模型理解任务
- 然后让PVP模型(后面会介绍这个工具人)对大量 [无标签的输入样本] 进行标签预测,称为软标签
- 让分类模型(真正的天选模型)对带有 [软标签的输入样本] 进行有监督学习训练
Introduction
- 由于大量的language、domain和task以及人工标注数据的成本,在NLP的实际使用中,通常只有少量带标签的示例,所以few-shot是值得研究的部分;
- 当仅有少量数据时,依然使用传统的监督学习方法效果会非常差,仅有的文本无法让模型知道要具体如何进行分类,而如果添加一些文本解释(textual explanation),则可以帮助模型理解这个task是什么。目前可以在包括GPT、BERT、RoBERT等任何一个语言模型上进行扩展;
- 本文提出PET模型,一种半监督学习方法使用自然语言模式(natural language pattern)将输入的文本重构为完形填空模式。
- PET主要包括三个步骤:
- 训练PVP模型(prompt,supervised):对于每个pattern,分别使用一个语言模型(PLM)在小规模的数据集上进行微调;
- 样本扩充:集成所有的PVP模型并为unlabeled数据集上进行标注,标注结果为soft-label(即每个label的概率分布);
- 得到最终模型(supervised):使用带有soft-label的数据,使用标准的classifier进行有监督训练分类。在工业界应用中,可以选择一些简单的模型(FastText/TextCnn)。
Pattern-Exploiting Training
Parameter description
Description
- 假设M表示一个预训练语言模型,词汇表记做 V,其中包含一个[MASK](原文作者用下划线表示),L表示目标任务 A 的所有标签集合。
$$
任务 A 的输入记做X = ( s_1 , s_2 , . . . , s_k ),其中s_i表示一个句子。
$$
$$
如果 k = 2则输入的 X是两个句子,通常在自然语言推理或文本蕴含任务中使用。
$$
定义一个函数 P,其将 X 作为输入,输出 P ( X ) 表示将 X 转化为带有[MASK]的phrase;
- x = (Mia likes pie, Mia hates pie)
- P(x) = Mia likes pie? ________, Mia hates pie.
定义一个映射: v : L → V其表示将每个标签映射到具体的词。例如在情感分析中,我们可以为positive标签寻找一个词great作为替代。
- v(positive) = good / great
- v(negative) = bad / wrong
最终我们称 ( P , v )为pattern-verbalizer-pair(PVP)。
PVP Example
给定一个sentence pair任务,其判断两个句子是否矛盾。输入则为两个句子 x = (Mia likes pie, Mia hates pie)
经过P函数后映射成一个带pattern的句子P(x) = Mia likes pie? ________, Mia hates pie.
由于这是自然语言推理任务,所以原始标签为entailment(继承关系)和contradiction(矛盾关系)。通过v映射后为
v -> {entailment: yes, contradiction: no}
PVP Training and Inference
$$
定义一个 M ( w ∣ Z )表示给定带有一个[MASK]标记的序列 Z,语言模型可以在该[MASK]位置填入词 w ∈ L的非归一化得分
$$
$$
如:s_p(l|x) = M(v(l) | P(x))
$$
然后用softmax来获得每个label的概率分布, 并且用cross-entropy进行训练

Auxiliary Language Modeling
作者发现,由于这是在非常少的样本集合 T上进行训练,可能会导致灾难性遗忘,因此作者引入预训练模型的loss作为辅助损失(Auxiliary MLM loss),两个损失通过加权方式结合, 作者根据先前的工作,取了一个经验值 α = 10^(-4)
$$
L=(1−α)⋅L_{CE}+α⋅L_{MLM}
$$
那么这个辅助损失是怎么得到的呢?
这是引入无标注数据一起训练得到的!举个简单的例子,下图样例1是labeled数据,我们利用pattern把它改写后,对__部分做完形填空预测(即MLM任务)。样例2是一个unlabeled数据,我们就不对__部分做预测,而是对被【MASK】做预测。这里的【MASK】可以采用BERT的方法,随机对句子的15%token进行【MASK】。这样做的好处是,能让model更适应于当前的任务,有点像在预训练模型上继续根据任务的domain和task继续做预训练,然后再做fine-tunning呢

Combining PVPs
现在少量有标签数据和大量无标签数据都被用上了,而且损失函数也定义好了,是不是直接train一波就可以达到我们的期待呢?
可能不太行,因为pattern的形式多种多样,怎么知道当前选的pattern好不好呢?
举个例子,如下图,我们可以造两个pattern,又可以造两个verblizer。这样,图中所示,其实一共有4个PVP。我们怎么衡量哪一个PVP训练完后在测试集上的效果最好?

答案是我们也不知道,因为我们不能站在上帝视角从一开头就选出最佳的PVP,同样由于是小样本学习,也没有足够的验证集让我们挑选最佳的PVP。既然如此,解决方式就是微调 + 集成 + 知识蒸馏。
具体的,我们用20个labeled数据训练4个PVP模型,然后拿这四个PVP模型对1K条unlabeled数据进行预测,预测的结果用下式进行平均。

这里的 Z 保持概率和为1, sp(l|x) 就是单个PVP模型对样本预测的概率分布, w(p) 就是PVP的权重。有uniform和weighted两种方式,uniform就是所有PVP的权重都为1,weighted就是把每个PVP的权重设置为它们在训练集上的准确率。最后还要对上式进行temperature=2的软化。
这就是在做知识的蒸馏。何谓知识的蒸馏?经过这样处理后,噪声减少了,利用多个PVP平均的思想把某些本来单个PVP预测偏差比较大的进行平均后修正。
这样子,利用训练好的PVPs所有1K条unlabeled数据打上soft label,再用这1K条打上软标签的数据进行传统的有监督训练,训练完的model应用于下游任务的model。注意哦,这里就可以用轻量的模型来做fine tuning了哦,因为从20条labeled数据扩充到1K条有带有soft label的数据,labeled数据量大大增加,这时候轻量级的模型也能取得不错的结果,而且轻量模型对轻量部署、高并发等场景更加友好。
下图就是所有的流程,再总结一下步骤就是

- 第一步:分别先定义PVPs,然后对每个PVP用labeled数据进行单独的训练,该步可以加入上面提到的Auxiliary Language Modeling一起训练;
- 第二步:用训练好的PVPs,对unlabled数据进行预测,并知识蒸馏,得到soft label;
- 第三步:用第二步得到的带有soft label的data,用传统的fine tuning方法训练分类model。
- 总结:PVP就是工具人,我们训练一堆PVPs,让他们预测soft label。我们拿到soft label就可以用分类器C做有监督fine tuning啦
Iterative PET (iPET)
将所有PVPs知识提取到单个分类器C上意味着PVP们无法相互学习,并且有些PVP就是老鼠屎,导致最终分类器C的训练集的标签错误实例较多 - -… 为了解决这些个问题,iPET诞生
- PET的方法:
- 用labeled数据训练所有PVP
- PVPs共同预测unlabeled数据的soft label
- iPET的方法:
- 用labeled数据训练所有PVP
- 对于每一个PVP模型,随机选上一轮的0.25(n-1) 个PVP来预测unlabeled数据的soft label,然后从每一个类别中挑选概率高的样本T,避免引入大量错误标记的数据。将T合并原来的labeled数据称为Ti,这个Ti就是当前PVP模型的[微调数据集]
- 迭代第二步共k次
- 最后一次迭代后的PVPs共同预测unlabeled数据的soft label
- 总结:iPET貌似有点三个臭皮匠顶过一个诸葛亮的思想…
Experiments


Analysis
Combining PVPs
作者发现不同PVP之间可能有很大的性能差别,如下图min就是最差的PVP,max就是最好的PVP,可以观察到它们之间的差别就很大。但是又不能站在上帝视角从一开始就选择最好的PVP,所以办法就是做Combining PVPs,即上面所提到的知识蒸馏,而且发现蒸馏后会比采用单个最好的PVP效果还要好,并且发现uniform和weighted两个方法效果差不多。

Auxiliary Language Modeling
labeled数据越少,auxiliary task的提升效果越明显。

iPET
iPET的效果,因为iPET是迭代多轮,每一轮每个PVP的训练集都会增大,从图可以看到每一轮的模型效果都是越来越好的。

In-Domain Pretraining
这里讨论了一个问题:PET效果比有监督训练好,是不是因为PET在大量无标签上打上软标签,扩大了有标签数据集?然后作者做了一个实验,有监督训练时,先在所有数据集上进行继续预训练(这一步作者认为相当于把无标签数据也加进来了),然后再fine funing。实验结果表明,即使这样,有监督效果也离PET有一定距离。

References
original paper: https://arxiv.org/pdf/2001.07676.pdf
Interpretation of the paper: